home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AmigActive 10
/
AACD 10.iso
/
AACD
/
Online
/
SpeakFreely
/
src
/
speakfree.h
< prev
next >
Wrap
C/C++ Source or Header
|
2000-05-18
|
8KB
|
271 lines
/*
Speak Freely for Unix definitions
*/
#define RTP_SUPPORT
#define PUSH_TO_TALK
#define FACE_SET_GEOMETRY
#if defined(sun) && !defined(Solaris)
#define BSD_like
#endif
#ifdef __FreeBSD__
#define BSD_like
#endif
#ifdef sgi
#define _BSD_SIGNALS
#endif
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <assert.h>
#include <string.h>
#include <ctype.h>
#include <time.h>
#ifdef PUSH_TO_TALK
#include <curses.h>
#endif
#include <sys/types.h>
#include <sys/time.h>
#include <sys/wait.h>
#ifdef BSD_like
#include <sys/timeb.h>
#endif
#ifdef Solaris
#include <sys/systeminfo.h>
#endif
#ifdef sgi
#include <dmedia/audio.h>
#include <limits.h>
#endif
#include <errno.h>
#include <signal.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#ifdef LINUX_FPU_FIX
#include <fpu_control.h>
#endif
#define NOLONGLONG
#include "types.h"
#ifndef NOCRYPTO
#define CRYPTO
#endif
#ifdef CRYPTO
#include "blowfish.h"
#include "des.h"
#endif
#include "ulaw2linear.h"
#include "adpcm-u.h"
#include "lpc.h"
#include "gsm.h"
#include "md5.h"
#include "rtp.h"
#include "rtpacket.h"
#include "audio_descr.h"
#include "common.h"
#define TINY_PACKETS 512 /* Ideal tiny packet size */
#define FACEDIR "/tmp/" /* Directory where you'd like to keep face files */
#define BUFL 8000
#define LONG long
/* AUDIO_DEVICE_FILE enables code for platforms which support
audio via one or more device files, such as /dev/audio.
Platforms which do not implement audio in this manner,
for example SGI and Hewlett-Packard Unix workstations,
should #undef AUDIO_DEVICE_FILE in the lines below. */
#define AUDIO_DEVICE_FILE
/* Platform-specific undefines for non-device-file audio. */
#ifdef sgi
#undef AUDIO_DEVICE_FILE
#endif
#ifdef HEWLETT_PACKARD
#undef AUDIO_DEVICE_FILE
#endif
/* Binary block and signal functions for fanatic ex-BSD platforms. */
#ifdef Solaris
#define bcmp(a, b, n) memcmp(a, b, n)
#define bcopy(a, b, n) memmove(b, a, n)
#define bzero(a, n) memset(a, 0, n)
typedef void (*signalFUNC)(int);
#define signal(a, b) sigset(a, (signalFUNC) b)
#define signalFUNCreturn (signalFUNC)
#endif
#ifndef signalFUNCreturn
#define signalFUNCreturn
#endif
/* Auto-configure multicast support */
#ifdef IP_ADD_MEMBERSHIP
#define MULTICAST
#endif
#define LPC_FRAME_SIZE 160 /* Frame size for LPC compression */
struct soundbuf {
LONG compression;
char sendinghost[16];
struct {
LONG buffer_len;
char buffer_val[BUFL];
} buffer;
};
typedef struct soundbuf soundbuf;
struct sbhead {
LONG compression;
char sendinghost[16];
struct {
LONG buffer_len;
char buffer_val[16];
} buffer;
};
typedef struct sbhead sbhead;
#define roSeq(s) (*((unsigned char *) &((s)->buffer.buffer_len)))
#ifndef TRUE
#define TRUE 1
#endif
#ifndef FALSE
#define FALSE 0
#endif
#define V (void)
#define ELEMENTS(array) (sizeof(array)/sizeof((array)[0]))
/* Packet mode flags. */
#define fComp2X 1 /* Simple 2 to 1 compression */
#define fDebug 2 /* Debug mode */
#define fSetDest 4 /* Set sound output destination */
#define fDestSpkr 0 /* Destination: speaker */
#define fDestJack 8 /* Destination: audio output jack */
#define fLoopBack 16 /* Loopback packets for testing */
#define fCompGSM 32 /* GSM compression */
#define fEncDES 64 /* DES encrypted */
#define fEncOTP 128 /* One-time pad encrypted */
#define fEncIDEA 256 /* IDEA encrypted */
#define fCompADPCM 512 /* ADPCM compressed */
#define fEncPGP 1024 /* PGP encrypted */
#define fKeyPGP 2048 /* Buffer contains PGP-encrypted session key */
#define fCompLPC 4096 /* LPC compressed */
#define fFaceData 8192 /* Request/reply for face data */
#define fFaceOffer 16384 /* Offer face image to remote host */
#define fCompVOX 0x10000 /* VOX compressed */
#define fCompLPC10 0x20000 /* LPC-10 compressed */
#define fCompRobust 0x40000 /* Robust packet replication ? */
#define fEncBF 0x80000 /* Blowfish encrypted */
#define fProtocol 0x40000000 /* Speak Freely protocol flag */
/* Special definitions for face data packets (which have fFaceData set). */
#define faceRequest 1 /* Face data request */
#define faceReply 2 /* Face data reply */
#define faceLess 4 /* No face available */
/* Mask to extract packet modes. */
#define fCompressionModes (fComp2X | fCompGSM | fCompADPCM | fCompLPC)
#define isEncrypted(x) (((x) & (fEncDES | fEncOTP | fEncOTP | fEncPGP)) != 0)
/* Special definitions for half-duplex control packets. */
#define fHalfDuplex 0x10000000 /* Local half-duplex transition */
#ifdef HALF_DUPLEX
#define fHalfDuplexMute 1 /* Mute audio output to allow input */
#define fHalfDuplexResume 2 /* Resume audio output */
#endif
/* Test if a packet actually contains sound. */
#define isSoundPacket(c) (((c) & (fFaceData | fKeyPGP | fHalfDuplex)) == 0)
/* Open connection state. */
struct connection {
struct connection *con_next; /* Next connection */
struct in_addr con_addr; /* Host Internet address */
char pgpkey[17]; /* PGP key for connection */
char keymd5[16]; /* Digest of key file */
long con_timeout; /* Connection timeout */
long con_busy; /* Connection busy timeout */
char con_hostname[264]; /* Host name */
long con_compmodes; /* Last compression modes */
short con_protocol; /* Transmission protocol */
int con_reply_current; /* Reply file current ? */
#ifndef CRYPTO
int con_crypt_warning; /* Encryption warning sent ? */
#endif
char con_session[4]; /* VAT/RTP session identifier */
lpcstate_t lpcc; /* LPC decoder state */
int con_rseq; /* Robust mode sequence number */
char con_uname[4096]; /* User name */
char con_email[256]; /* User E-mail address, if known */
char face_filename[300]; /* Face temporary file name */
FILE *face_file; /* Face file, when open */
pid_t face_viewer; /* Face file viewer PID */
int face_stat; /* Face retrieval status */
long face_address; /* Address of current block request */
int face_retry; /* Timeout retry count */
int face_timeout; /* Timeout interval */
};
/* Face retrieval status values for face_stat. */
#define FSinit 0 /* Nothing requested yet */
#define FSrequest 1 /* Request sent, awaiting reply */
#define FSreply 2 /* Reply received, ready for next request */
#define FScomplete 3 /* Face file reception complete */
#define FSabandoned 4 /* Face file retrieval abandoned */
/* Face retrieval configuration parameters. */
#define FaceFetchInterval 250000 /* Interval between block requests, usec */
/* Resend block request after this time */
#define FaceTimeout (FaceFetchInterval * 20)
#define FaceMaxRetries 10 /* Maximum retries to obtain face data */
/* Protocol types for con_protocol. */
#define PROTOCOL_SPEAKFREE 0 /* Speak Freely protocol */
#define PROTOCOL_VAT 1 /* VAT protocol */
#define PROTOCOL_RTP 2 /* RTP protocol */
#define PROTOCOL_VATRTP_CRYPT 3 /* Probably encrypted VAT or RTP message */
#define PROTOCOL_UNKNOWN 4 /* No evidence as to protocol yet */
/* RTCP APP packet identifiers. */
#define RTCP_APP_TEXT_CHAT "SFtc" /* Text chat message */
/* Look Who's Listening parameters. */
#define LWL_MAX_SITES 5 /* Maximum LWL servers a user can publish on */
#ifdef MYDOMAIN
#define getdomainname(s, n) strncpy(s, MYDOMAIN, n)
#endif